package main

/**
 * 给定一个字符串，找出不含有重复字符的最长子串的长度。
 * 示例：
 * 给定 "abcabcbb" ，没有重复字符的最长子串是 "abc" ，那么长度就是3。
 * 给定 "bbbbb" ，最长的子串就是 "b" ，长度是1。
 * 给定 "pwwkew" ，最长子串是 "wke" ，长度是3。请注意答案必须是一个子串，"pwke" 是 子序列  而不是子串。
*/
func lengthOfLongestSubstring(s string) int {
	if len(s) < 1 {
		return 0
	}

	start := 0
	maxLen := 0

	stringMap := make(map[rune]int)
	for k, v := range s {
		if lastPos, ok := stringMap[v]; ok && lastPos >= start {
			start = lastPos + 1
		}

		if (k - start + 1) > maxLen {
			maxLen = k - start + 1
		}

		stringMap[v] = k
	}

	return maxLen
}
